package it.polimi.c4c.entities;

import java.io.Serializable;
import java.util.Date;
import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * @author matteo
 *
 */
@SuppressWarnings("serial")

@Entity
@Table(name = "ChiamataRegalo")
public class ChiamataRegalo extends Chiamata implements Serializable {

	private Date dataCompleanno;
	private Utente festeggiato;
	
	private Collection<Regalo> listaRegali;
	
	/**
	 * @return the id
	 */
	@Id
	@GeneratedValue
	public int getId() {
		return super.getId();
	}
	
	/**
	 * @param id the id to set
	 */
	public void setId(int id) {
		super.setId(id);
	}
	
	/**
	 * @return the stato
	 */
	@Column(name = "stato", nullable = false)
	@Enumerated(EnumType.STRING)
	public StatoChiamata getStato() {
		return super.getStato();
	}
	
	/**
	 * @param stato the stato to set
	 */
	public void setStato(StatoChiamata stato) {
		super.setStato(stato);
	}
	
	/**
	 * @return the listaPartecipanti
	 */
	@OneToMany
	public Collection<Utente> getListaPartecipanti() {
		return super.getListaPartecipanti();
	}
	
	/**
	 * @param listaPartecipanti the listaPartecipanti to set
	 */
	public void setListaPartecipanti(Collection<Utente> listaPartecipanti) {
		super.setListaPartecipanti(listaPartecipanti);
	}
	
	/**
	 * @return the dataCompleanno
	 */
	@Column(name = "dataCompleanno", nullable = false)
	@Temporal(TemporalType.DATE)
	public Date getDataCompleanno() {
		return dataCompleanno;
	}
	
	/**
	 * @param dataCompleanno the dataCompleanno to set
	 */
	public void setDataCompleanno(Date dataCompleanno) {
		this.dataCompleanno = dataCompleanno;
	}
	
	/**
	 * @return the festeggiato
	 */
	@OneToOne(optional = false)
	public Utente getFesteggiato() {
		return festeggiato;
	}
	
	/**
	 * @param festeggiato the festeggiato to set
	 */
	public void setFesteggiato(Utente festeggiato) {
		this.festeggiato = festeggiato;
	}

	/**
	 * @return the listaRegali
	 */
	@OneToMany(mappedBy = "id")
	public Collection<Regalo> getListaRegali() {
		return listaRegali;
	}

	/**
	 * @param listaRegali the listaRegali to set
	 */
	public void setListaRegali(Collection<Regalo> listaRegali) {
		this.listaRegali = listaRegali;
	}
	
}
